public class Test03 {
    public String addBinary(String a, String b) {
        int tmp = 0;  // 用于存储进位
        int lengtha = a.length(), lengthb = b.length();
        StringBuffer sb = new StringBuffer();  // 用于存储结果
        int i;

        // 同时处理两个字符串的共同长度部分
        for(i = 1; i <= lengtha && i <= lengthb; i++){
            // 由于 a.charAt() 返回的是 char，所以先减去 '0' 得到数字
            int numa = a.charAt(lengtha - i) - '0';
            int numb = b.charAt(lengthb - i) - '0';

            // 计算当前位和进位
            tmp += numa + numb;
            sb.append(tmp % 2);  // 将当前位加入结果
            tmp /= 2;  // 更新进位
        }

        // 如果 a 还有剩余部分
        while(i <= lengtha){
            int numa = a.charAt(lengtha - i) - '0';  // 处理 a 的剩余位
            tmp += numa;
            sb.append(tmp % 2);  // 加入当前位
            tmp /= 2;  // 更新进位
            i++;
        }

        // 如果 b 还有剩余部分
        while(i <= lengthb){
            int numb = b.charAt(lengthb - i) - '0';  // 处理 b 的剩余位
            tmp += numb;
            sb.append(tmp % 2);  // 加入当前位
            tmp /= 2;  // 更新进位
            i++;
        }

        // 如果最后还有进位
        if (tmp != 0) {
            sb.append(tmp);  // 加入最后的进位
        }

        // 翻转结果，因为是从低位到高位添加的
        String ret = sb.reverse().toString();

        return ret;



    }
}
